import { get, post, put, del } from './request'
import { AUTH_ENDPOINTS, USER_ENDPOINTS } from './api'
import type { ApiResponse } from './index'

// 定义用户相关的数据类型
export interface User {
  id: number
  username: string
  email: string
  avatar?: string
  status: number
  createTime: string
  updateTime: string
}

export interface UserListParams {
  page: number
  size: number
  username?: string
  status?: number
}

export interface UserListResponse {
  list: User[]
  total: number
  page: number
  size: number
}

export interface LoginParams {
  username: string
  password: string
}

export interface LoginResponse {
  token: string
  user: User
}

export interface RegisterParams {
  username: string
  email: string
  password: string
}

// 用户管理相关API
export class UserApi {
  /**
   * 用户登录
   * @param data 登录参数
   * @returns 登录结果，包含token和用户信息
   */
  static async login(data: LoginParams): Promise<LoginResponse> {
    const response = await post<LoginResponse>(AUTH_ENDPOINTS.LOGIN, data)
    return response.data
  }

  /**
   * 用户登出
   * @returns 登出结果
   */
  static async logout(): Promise<void> {
    await post(AUTH_ENDPOINTS.LOGOUT)
  }

  /**
   * 获取当前用户信息
   * @returns 用户信息
   */
  static async getCurrentUser(): Promise<User> {
    const response = await get<User>(AUTH_ENDPOINTS.GET_USER_INFO)
    return response.data
  }

  /**
   * 刷新token
   * @returns 新的token
   */
  static async refreshToken(): Promise<string> {
    const response = await post<{ token: string }>(AUTH_ENDPOINTS.REFRESH_TOKEN)
    return response.data.token
  }

  /**
   * 获取用户列表
   * @param params 查询参数
   * @returns 用户列表
   */
  static async getUserList(params: UserListParams): Promise<UserListResponse> {
    const response = await get<UserListResponse>(USER_ENDPOINTS.GET_USER_LIST, { params })
    return response.data
  }

  /**
   * 根据ID获取用户详情
   * @param id 用户ID
   * @returns 用户详情
   */
  static async getUserById(id: number): Promise<User> {
    const response = await get<User>(USER_ENDPOINTS.GET_USER_BY_ID.replace(':id', id.toString()))
    return response.data
  }

  /**
   * 创建用户
   * @param data 用户数据
   * @returns 创建的用户
   */
  static async createUser(data: RegisterParams): Promise<User> {
    const response = await post<User>(USER_ENDPOINTS.CREATE_USER, data)
    return response.data
  }

  /**
   * 更新用户
   * @param id 用户ID
   * @param data 用户数据
   * @returns 更新后的用户
   */
  static async updateUser(id: number, data: Partial<RegisterParams>): Promise<User> {
    const response = await put<User>(USER_ENDPOINTS.UPDATE_USER.replace(':id', id.toString()), data)
    return response.data
  }

  /**
   * 删除用户
   * @param id 用户ID
   * @returns 删除结果
   */
  static async deleteUser(id: number): Promise<void> {
    await del(USER_ENDPOINTS.DELETE_USER.replace(':id', id.toString()))
  }

  /**
   * 批量删除用户
   * @param ids 用户ID列表
   * @returns 删除结果
   */
  static async batchDeleteUsers(ids: number[]): Promise<void> {
    await post(USER_ENDPOINTS.BATCH_DELETE_USERS, { ids })
  }
}

export default UserApi